import shutil

"""
shutil 是 Python 标准库中的一个模块，主要用于高级的文件操作。
它提供了文件复制、移动、重命名、删除等操作的函数，还可以操作文件和目录的权限、查看磁盘的使用情况等。
shutil 模块是处理文件和目录的高效工具，尤其是在需要进行批量文件操作时非常有用。
"""

# 它将源文件 src 复制到目标位置 dst，并保持文件的权限不变。
shutil.copy("test.py", "new_test.py")

# shutil.copy2(src, dst) 类似于 shutil.copy()，但它不仅复制文件的内容和权限，还复制了文件的元数据（如修改时间、访问时间等）
shutil.copy2("test.py", "new_test.py")

# shutil.copytree(src, dst) 用于递归地复制整个目录树。它会复制源目录及其所有内容到目标目录。
shutil.copytree('source_directory', 'destination_directory')

# shutil.move(src, dst) 用于移动文件或目录到新的位置。移动操作是一个高效的操作，如果源文件和目标位置在同一个文件系统中，它将直接重命名文件路径而不复制内容。
shutil.move('file_or_directory', 'new_location')

# shutil.rmtree(path) 递归地删除一个目录树。使用这个函数时要非常小心，因为它会删除指定目录及其所有内容，且无法恢复。
shutil.rmtree('directory_to_delete')

# 返回一个命名元组（total, used, free），表示给定路径所在磁盘的总空间、已用空间和可用空间
usage = shutil.disk_usage('/')
print(f'Total: {usage.total} bytes')
print(f'Used: {usage.used} bytes')
print(f'Free: {usage.free} bytes')

# 用于创建压缩包
"""
base_name 是压缩包的名称
format 是压缩包的格式（如 zip, tar, gztar, bztar, xztar）
root_dir 是要压缩的目录
"""
shutil.make_archive('archive_name', 'zip', '')

# 用于解压缩文件。filename 是要解压缩的文件名，extract_dir 是解压缩后的文件存放目录。
shutil.unpack_archive('archive_name.zip', 'extracted_directory')

# 用于查找可执行文件的位置，它会在系统的 PATH 环境变量中查找指定的命令。如果找到则返回命令的路径，找不到则返回 None
path_to_python = shutil.which('python')
print(path_to_python)

# 用于更改文件或目录的所有者。user 是新所有者的用户名或用户ID，group 是新的组名或组ID
shutil.chown('file.txt', user='newuser', group='newgroup')

# shutil处理符号链接时，会保留原始的链接形式。在复制目录时，copytree 函数提供了一个 symlinks 参数，可以控制是否保留符号链接。
shutil.copytree('source_directory', 'destination_directory', symlinks=True)


